package com.sky.mapper;

import com.sky.entity.ShoppingCart;
import com.sky.vo.PriseVO;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;

@Mapper
public interface ShoppingCartMapper {
    /**
     * 通过当前用户id主键查看购物车
     * @param userId
     * XML配置文件
     * @return
     */
    List<ShoppingCart> getShoppingCartList(Long userId);

    /**
     * 通过菜品id+userid查看购物车是否有当前菜品
     * XML配置文件
     * @param dishId
     * @param userId
     * @return
     */
    @Select("select * from shopping_cart where user_id=#{userId} and dish_id=#{dishId}")
    ShoppingCart getShoppingCartListByDishId(Long dishId, Long userId);

    /**
     * 新增购物车菜品
     * XML配置文件
     * @param shoppingCart
     * @return
     */
    void insert(ShoppingCart shoppingCart);

    /**
     * 更新购物车中的菜品的数据 通过购物车的id更新！！
     * XML配置文件
     * @param shoppingCart
     * @return
     */
    int update(ShoppingCart shoppingCart);

    /**
     * 删除购物车中不应该存在的菜品{过期菜品{停售菜品}}
     * XML配置文件
     * @param userId
     * @param dishId
     */
    @Delete("delete from shopping_cart where user_id=#{userId} and dish_id=#{dishId}")
    void deleteShoppingCartByUserIdAndDishId(Long userId, Long dishId);

    /**
     * 删除购物车中不应该存在的套餐{过期套餐{停售套餐}}
     * XML配置文件
     * @param userId
     * @param setMealId
     */
    @Delete("delete from shopping_cart where user_id=#{userId} and setmeal_id=#{setMealId}")
    void deleteShoppingCartByUserIdAndSetMealId(Long userId, Long setMealId);

    /**
     * 通过套餐id+userid查看购物车是否有当前套餐
     * XML配置文件
     * @param currentId
     * @param id
     * @return
     */
    @Select("select * from shopping_cart where user_id=#{currentId} and setmeal_id=#{id}")
    ShoppingCart getShoppingCartListBySetMealId(Long currentId, Long id);

    /**
     * 查询用户购物车物品总额跟金额
     * @param userId
     * @return
     */
    @Select("select number,amount from shopping_cart where user_id=#{userId}")
    List<PriseVO> settleAccounts(Long userId);
    /**
     * 清空购物车
     * @return
     */
    @Delete("delete from shopping_cart where user_id=#{userId}")
    void cleanCart(Long userId);

    /**
     * 统计购物车中物品的数量
     * @param userId
     * @return
     */
    @Select("select sum(number) from shopping_cart where user_id=#{userId}")
    int countShoppingCart(Long userId);
}
